﻿using UnityEngine;
using System.Collections;

public class TextView : MonoBehaviour
{
	// Properties

	[SerializeField]
	TextMesh			m_text;
	[SerializeField]
	float				m_maxHeightWithoutScroll;		// 스크롤 되지 않는 최대 범위
	[SerializeField]
	float				m_scrollSpeed		= 24f;
	[SerializeField]
	float				m_wordWrapWidth;


	// Members

	Transform			m_textT;
	float				m_textTotalHeight;				// 텍스트 최대 높이
	bool				m_isAwake	= false;

	TextSize			m_textSizeObj;


	/// <summary>
	/// 텍스트 색상
	/// </summary>
	/// <value>The color.</value>
	public Color color
	{
		get
		{
			return m_text.color;
		}
		set
		{
			m_text.color	= value;
		}
	}

	void Awake()
	{
		if(m_isAwake)
			return;
		m_isAwake		= true;

		m_textT			= m_text.transform;
		m_textSizeObj	= new TextSize(m_text);
	}

	public void SetText(string text)
	{
		Awake ();

		m_text.text			= text;
		//Debug.Log("totalHeight : " + m_textTotalHeight);
		m_textSizeObj.FitToWidth(m_wordWrapWidth);				// 자동 줄바꿈 세팅
		m_textTotalHeight	= m_text.renderer.bounds.size.y;	// 텍스트 렌더링의 최대 높이 범위를 구한다.

		m_textT.localPosition	= Vector3.zero;					// 스크롤 원점으로 돌리기


	}

	void Update()
	{
		if(m_textTotalHeight > m_maxHeightWithoutScroll)		// 텍스트가 영역보다 넘칠 때 스크롤 작동
		{
			UpdateScroll();
		}
	}

	void UpdateScroll()
	{
		if(Input.GetKey(KeyCode.PageUp))
		{
			m_textT.Translate(Vector3.down * m_scrollSpeed * Time.deltaTime);
			if(m_textT.localPosition.y < 0)
			{
				m_textT.Translate(Vector3.down * m_textT.localPosition.y);
			}
		}
		else if(Input.GetKey(KeyCode.PageDown))
		{
			m_textT.Translate(Vector3.up * m_scrollSpeed * Time.deltaTime);

			float yDownMax	= m_textTotalHeight - m_maxHeightWithoutScroll;
			if(m_textT.localPosition.y > yDownMax)
			{
				m_textT.Translate(Vector3.up * (yDownMax - m_textT.localPosition.y));
			}
		}
	}
}
